package com.example.demo.domain.model;


import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Data
public class ParameterMap {
    private Map<String, ParameterDefinition> pdMap;// key = pdCode
    private Map<String, ParameterValue> pvMap;// key = pvCode
    private Map<String, List<ParameterAttributeValue>> pavListMap; // key = pvCode

    public ParameterMap(Parameter parameter) {
        List<ParameterDefinition> parameterDefinitions = parameter.getParameterDefinitions();
        pdMap = parameterDefinitions.stream().collect(Collectors.toMap(ParameterDefinition::getCode, ParameterDefinition -> ParameterDefinition));

        List<ParameterValue> parameterValues = parameter.getParameterValues();
        pvMap = parameterValues.stream().collect(Collectors.toMap(ParameterValue::getCode, ParameterValue -> ParameterValue));

        for (ParameterValue parameterValue : parameterValues) {
            pavListMap.put(parameterValue.getCode(), parameterValue.getParameterAttributeValues());
        }


    }

    public List<ParameterAttributeValue> findByPvCode(String code) {
        return pavListMap.get(code);
    }

    public Map<String, ParameterAttributeValue> findPavMap(String code) {
        List<ParameterAttributeValue> attributeValues = pavListMap.get(code);
        return attributeValues.stream().collect(Collectors.toMap(ParameterAttributeValue::getAttributeCode, ParameterAttributeValue -> ParameterAttributeValue));
    }


    public Map<String, String> findPavCodeMap(String code) {
        List<ParameterAttributeValue> attributeValues = pavListMap.get(code);
        return attributeValues.stream().collect(Collectors.toMap(ParameterAttributeValue::getAttributeCode, ParameterAttributeValue -> ParameterAttributeValue.getAttributeCode()));
    }
}